package com.cxb.demotest.util;

import com.alibaba.fastjson.JSON;
import java.util.List;
import java.util.Objects;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;

/**
 * 格式转换器
 */
@Slf4j
public class Converter {

  /**
   * 字符串转整数
   *
   * @param value 字符串
   * @return 整数值，转换失败返回null
   */
  public static Integer toInteger(String value) {
    try {
      return Integer.parseInt(value);
    } catch (Exception ignored) {
    }

    return null;
  }

  /**
   * 字符串转 Byte
   *
   * @param value 字符串
   * @return Byte 值，转换失败返回 Null
   */
  public static Byte toByte(String value) {
    try {
      return Byte.parseByte(value);
    } catch (Exception ignored) {
    }

    return null;
  }

  /**
   * 将 T 转换为 R
   *
   * @param original    原始对象
   * @param targetClass 目标对象类
   * @return 目标对象
   * @throws IllegalAccessException 访问异常
   * @throws InstantiationException 创建实例异常
   */
  public static <T, R> R forBean(T original, Class<R> targetClass) {
    R instance = null;
    try {
      instance = targetClass.newInstance();
      BeanUtils.copyProperties(original, instance);
    } catch (Exception e) {
      log.warn("实体转换异常", e);
    }
    return instance;
  }

  /**
   * 集合格式转换
   *
   * @param original   原始结合
   * @param resultType 目标集合实体类型
   * @return 目标集合
   */
  public static <T, R> List<R> forList(List<T> original, Class<R> resultType) {
    return JSON.parseArray(JSON.toJSONString(original), resultType);
  }
  public static Integer getPage(Object page) {
    if (Objects.isNull(page)) {
      return 1;
    }

    Integer pageInt = toInteger(page.toString());
    if (Objects.isNull(pageInt)) {
      return 1;
    }
    return pageInt;
  }

  public static Integer getPerPage(Object page) {
    if (Objects.isNull(page)) {
      return 10;
    }

    Integer pageInt = toInteger(page.toString());
    if (Objects.isNull(pageInt)) {
      return 10;
    }
    return pageInt;
  }
}
